指针和自由存储空间

指针:是一个变量,存储的是值的地址,而不是值本身。

对变量应用地址运算符(&),就可以获得它的位置。

    using namespace std;
    int num = 10;
    cout << &num << endl;  // 取地址符号(&)获取变量的地址

使用常规变量时,值是指定的量,而地址为派生量。下面来看看指针策略,它是C++内存管理编程理念的核心。

指针与C++基本原理

  面向对象编程与传统的过程性编程的区别在于,OOP强调的是在运行阶段(而不是编译阶段)进行决策。运行阶段指的是程序在运行时,编译阶段指的是编辑器将程序组合起来时。运行阶段决策就好比度假时,选择参观哪些景点取决于天气和当时的心情;而编译阶段决策更像不管在什么条件下,都坚持预先设定的日程安排。

  运行阶段决策提供了灵活性,可以根据当时的情况进行调整。C++中声明数组,必须指定数组的长度。因此,数组长度在程序编译时就设定好了;这就是编译阶段决策。

  使用OOP时,您可能在运行阶段确定数组的长度。为使用这种方法,语言必须允许程序运行时创建数组。C++采用的方法是,使用关键字new请求正确数量的内存以及使用指针来跟踪新分配的内存的位置。

  在运行阶段做决策并非OOP独有的,但使用C++编写这样的代码比使用C语言简单。

指针---用于存储值的地址。指针名表示的是地址。*运算符被称为间接性或解除引用运算符,将其应用于指针,可以得到该地址处存储的值。

例如:假设manly是一个指针,则manly表示的是一个地址,而*manly表示存储在该地址处的值。*manly与常规int变量等效。

    int main()
    {
        using namespace std;
        int num = 10;
        cout << &num << endl;  // 取地址符号(&)获取变量的地址

        int* p;
        p = &num;
        cout << *p << endl;     // 解除引用符号(*)得到该地址处存储的值

        *p += 20;
        cout << *p << endl;
        return 0;
    }